package com.fyb.basic.juc.completableFuture;

import java.util.concurrent.CompletableFuture;

/**
 * @Author：MR.FANG
 * @name：ThenCompose
 * CompletableFuture 的 thenCompose（） 可以将让一个任务的执行结果 作为下一个任务的输入 依赖
 * 流程： 小王点菜 -> 厨师炒菜 -> 服务员打饭->小白吃饭等
 * thenCompose：在前一个任务完成后 下一个任务才会触发执行 阶段性的处理
 * @Date：2025/7/2 下午2:06
 */
public class ThenCompose {
    public static void main(String[] args) {
        // 1、小王进入餐厅的逻辑
        SmallTool.printTimeAndTread("小王进入餐厅");
        SmallTool.printTimeAndTread("小王点了一份西红柿炒蛋，又点了一份米饭");

        // 厨师炒菜
        CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndTread("厨师炒菜");
            SmallTool.sleepMillis(200);
            return "厨师的番茄炒蛋做好了";
        }).thenCompose(dist -> CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndTread("服务员打饭");
            SmallTool.sleepMillis(200);
            return dist + "，服务员饭也打好了";
        }));

        SmallTool.printTimeAndTread("小王正在打游戏");
        SmallTool.printTimeAndTread(String.format("%s,小王开吃", completableFuture.join()));
    }
}
